icon theme: Add a way to create GtkIconInfos from files
authorMatthias Clasen <mclasen@redhat.com>
Thu, 14 Jan 2016 17:53:50 +0000 (12:53 -0500)
committerMatthias Clasen <mclasen@redhat.com>
Thu, 14 Jan 2016 18:50:58 +0000 (13:50 -0500)
This is sometimes needed, and calling into actual icon theme
code just for it is confusing - the resulting icon does not
depend on the icon theme at all.

https://bugzilla.gnome.org/show_bug.cgi?id=760536

gtk/gtkicontheme.c
gtk/gtkiconthemeprivate.h

index 00ae3511c953ae1240c704e69e59aee0d984b727..544f79e9f6082cd6f1f08e96d305343a87222ae6 100644 (file)
@@ -37,7 +37,7 @@
 #include "win32/gdkwin32.h"
 #endif /* G_OS_WIN32 */
 
-#include "gtkicontheme.h"
+#include "gtkiconthemeprivate.h"
 #include "gtkcsspalettevalueprivate.h"
 #include "gtkcssrgbavalueprivate.h"
 #include "gtkdebug.h"
@@ -5462,6 +5462,15 @@ gtk_icon_theme_lookup_by_gicon_for_scale (GtkIconTheme       *icon_theme,
           info = gtk_icon_info_new_for_pixbuf (icon_theme, pixbuf);
         }
 
+      return info;
+    }
+  else if (G_IS_FILE_ICON (icon))
+    {
+      GFile *file = g_file_icon_get_file (G_FILE_ICON (icon));
+
+      info = gtk_icon_info_new_for_file (file, size, scale);
+      info->forced_size = (flags & GTK_ICON_LOOKUP_FORCE_SIZE) != 0;
+
       return info;
     }
   else if (G_IS_LOADABLE_ICON (icon))
@@ -5469,32 +5478,6 @@ gtk_icon_theme_lookup_by_gicon_for_scale (GtkIconTheme       *icon_theme,
       info = icon_info_new (ICON_THEME_DIR_UNTHEMED, size, 1);
       info->loadable = G_LOADABLE_ICON (g_object_ref (icon));
       info->is_svg = FALSE;
-
-      if (G_IS_FILE_ICON (icon))
-        {
-          GFile *file = g_file_icon_get_file (G_FILE_ICON (icon));
-          if (file != NULL)
-            {
-              info->icon_file = g_object_ref (file);
-              info->is_resource = g_file_has_uri_scheme (file, "resource");
-
-              if (info->is_resource)
-                {
-                  gchar *uri;
-
-                  uri = g_file_get_uri (file);
-                  info->filename = g_strdup (uri + 11); /* resource:// */
-                  g_free (uri);
-                }
-              else
-                {
-                  info->filename = g_file_get_path (file);
-                }
-
-              info->is_svg = suffix_from_name (info->filename) == ICON_SUFFIX_SVG;
-            }
-        }
-
       info->desired_size = size;
       info->desired_scale = scale;
       info->forced_size = (flags & GTK_ICON_LOOKUP_FORCE_SIZE) != 0;
@@ -5573,3 +5556,37 @@ gtk_icon_info_new_for_pixbuf (GtkIconTheme *icon_theme,
 
   return info;
 }
+
+GtkIconInfo *
+gtk_icon_info_new_for_file (GFile *file,
+                            gint   size,
+                            gint   scale)
+{
+  GtkIconInfo *info;
+
+  info = icon_info_new (ICON_THEME_DIR_UNTHEMED, size, 1);
+  info->loadable = G_LOADABLE_ICON (g_file_icon_new (file));
+  info->icon_file = g_object_ref (file);
+  info->is_resource = g_file_has_uri_scheme (file, "resource");
+
+  if (info->is_resource)
+    {
+      gchar *uri;
+
+      uri = g_file_get_uri (file);
+      info->filename = g_strdup (uri + 11); /* resource:// */
+      g_free (uri);
+    }
+  else
+    {
+      info->filename = g_file_get_path (file);
+    }
+
+  info->is_svg = suffix_from_name (info->filename) == ICON_SUFFIX_SVG;
+
+ info->desired_size = size;
+ info->desired_scale = scale;
+ info->forced_size = FALSE;
+
+ return info;
+}
index 77d95615c4ec133a632635122e886f0f9a10deed..ca9d5177b0c78aa0020814530d7e10d14979129d 100644 (file)
@@ -19,6 +19,7 @@
 #define __GTK_ICON_THEME_PRIVATE_H__
 
 #include <gtk/gtkicontheme.h>
+#include <gtk/gtkcssstyleprivate.h>
 
 void        gtk_icon_theme_lookup_symbolic_colors       (GtkCssStyle    *style,
                                                          GdkRGBA        *color_out,
@@ -26,4 +27,8 @@ void        gtk_icon_theme_lookup_symbolic_colors       (GtkCssStyle    *style,
                                                          GdkRGBA        *warning_out,
                                                          GdkRGBA        *error_out);
 
+GtkIconInfo *gtk_icon_info_new_for_file (GFile *file,
+                                         gint   size,
+                                         gint   scale);
+
 #endif /* __GTK_ICON_THEME_PRIVATE_H__ */